package com.example.clientmiviamoviego4;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Fragment che gestisce le operazioni di reperimento dell'account utente da
 * utilizzare all'atto della registrazione.
 * 
 * @author Gang of Four
 * 
 * */
public class ConfirmAccountFragment extends Fragment {

	/**
	 * Riferimento all'oggetto utilizzato per la callback alla
	 * RegistrationActivity.
	 * */
	OnSelectedUserIDListener mCallback;

	/**
	 * Metodo richiamato all'atto dell'istanziamento del fragment.
	 * */
	public static Fragment newInstance(Bundle args) {
		Fragment fragment = new ConfirmAccountFragment();
		fragment.setArguments(args);
		return fragment;
	}

	/**
	 * Definizione dell'interfaccia relativa al listener che si occupa di
	 * effettuare il link tra l'oggetto mCallback e la RegistrationActivity.
	 * */
	public interface OnSelectedUserIDListener {
		public void onUserDefined(String user);
	}

	/**
	 * Costruttore della classe ConfirmAccountFragment.
	 * */
	public ConfirmAccountFragment() {
	}

	/**
	 * Metodo richiamato quando la gerarchia di view viene associata al
	 * fragment.
	 * */
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {

		View rootView = inflater.inflate(R.layout.fragment_confirm_account,
				container, false);
		Account[] accounts = AccountManager.get(getActivity())
				.getAccountsByType("com.google");
		TextView textView = (TextView) rootView
				.findViewById(R.id.text_google_account);
		final String google_account;
		if (accounts.length == 0) {
			google_account = getResources().getString(
					R.string.message_empty_googleAccount);
		} else {
			google_account = accounts[0].name;
		}
		textView.setText(google_account);
		final EditText alt_email = (EditText) rootView
				.findViewById(R.id.edit_registration_email);

		Toast t;

		if (getArguments().getBoolean("user_validation")) {
			t = Toast.makeText(getActivity(),
					getResources().getString(R.string.user_already_exists),
					Toast.LENGTH_SHORT);
			t.show();
		} else if (getArguments().getBoolean("server_result")) {
			t = Toast.makeText(getActivity(),
					getResources().getString(R.string.server_error),
					Toast.LENGTH_SHORT);
			t.show();
		}

		Button confirmButton = (Button) rootView
				.findViewById(R.id.button_confirm_email);
		confirmButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {

				String value = alt_email.getText().toString();
				if (!(value.isEmpty()) && isValid(value)) {
					value = alt_email.getText().toString();
					mCallback.onUserDefined(value);
				} else if (value.isEmpty()
						&& !google_account.equals(getResources().getString(
								R.string.message_empty_googleAccount))) {
					value = google_account;
					mCallback.onUserDefined(value);
				} else {
					Toast.makeText(getActivity(),
							getResources().getString(R.string.user_not_valid),
							Toast.LENGTH_SHORT).show();
				}

			}

			private final boolean isValid(String s) {
				if (s == null) {
					return false;
				} else {
					return android.util.Patterns.EMAIL_ADDRESS.matcher(s)
							.matches();
				}
			}
		});

		return rootView;
	}

	/**
	 * Metodo chiamato nel momento in cui il fragment viene associato
	 * all'activity.
	 * */
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		try {
			mCallback = (OnSelectedUserIDListener) activity;
		} catch (ClassCastException e) {
			throw new ClassCastException(activity.toString()
					+ " must implement OnSelectedUserIDListener");
		}
	}

	/**
	 * Metodo chiamato nel momento in cui il fragment � stato disassociato
	 * dall'activity.
	 * */
	public void onDetach() {
		super.onDetach();
		mCallback = null;
	}

}